/*
 * @Author: li bo
 * @Date: 2025/07/09 14:43:42
 * @LastEditors: li bo
 * @Description: "歌曲模型"
 */
module.exports = (sequelize, Sequelize) => {
    return sequelize.define("songs", {
        id: {
            type: Sequelize.UUID,
            notNull: true,
            primaryKey: true,
            comment: '唯一标识',
            defaultValue: Sequelize.UUIDV4,
        },
        title: {
            type: Sequelize.STRING(100),
            comment: '歌曲标题',
            allowNull:false, // 禁止 null
            field:'title',
            validate: {
                notEmpty: {
                    msg: "歌曲标题不能是空字符串"
                }, // 禁止空字符串
            },
        },
        url: {
            type: Sequelize.STRING(255),
            comment: '歌曲文件存储路径或URL',
            allowNull:false, // 禁止 null
            validate: {
                notEmpty: {
                    msg: "歌曲地址不能是空字符串"
                }, // 禁止空字符串
            }
        },
        duration: {
            type: Sequelize.INTEGER,
            comment: '歌曲时长(秒)',
            allowNull:false, // 禁止 null
            validate: {
                notEmpty: {
                    msg: "歌曲时长不能是空字符串"
                }, // 禁止空字符串
            }
        },
        coverUrl: {
            type: Sequelize.STRING(255),
            comment: '歌曲封面图片存储路径或URL',
            defaultValue: '../../public/web-site/website-avatar.jpg',
            field: 'cover_url'
        },
        albumId: {
            type: Sequelize.STRING(100),
            comment: '所属专辑ID',
            allowNull: true,
            field: 'album_id'
        },
        genreId: {
            type: Sequelize.STRING(100),
            comment: '流派ID',
            allowNull: true,
            field: 'genre_id'
        },
        userId: {
            type: Sequelize.STRING(100),
            comment: '上传用户ID',
            allowNull: true,
            field: 'user_id'
        },
        playCount: {
            type: Sequelize.INTEGER,
            comment: '播放次数',
            defaultValue: 0,
            field: 'play_count'
        },
    }, {
        tableName: 'songs',
        comment: '歌曲信息表',
        indexes: [
            {
                name: 'songs_title_index',  // 自定义索引名称避免冲突
                fields: ['title'], // 索引字段
            },
            {
                name: 'songs_title_fulltext', // 自定义全文索引名称
                type: 'FULLTEXT', // 全文索引
                fields: ['title'], // 索引字段
            }
        ]
    })
}